/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年10月7日
 * 项目： rainhy-webcore
 */
package com.rainhy.property.context;

/**
 * 属性管理器
 * 
 * @author rain
 * @version [版本号, 2016年10月7日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public interface PropertyManager {
    
    /**
     * 
     * 批量删除属性
     *
     * @param propertyKey
     * 
     * @return void [返回类型说明]
     * @throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年10月12日]
     * @author rain
     */
    void deleteProperties(String propertyKey);
    
    /**
     * 
     * 删除属性
     *
     * @param propertyType 属性类型
     * @param propertyKey 属性key
     * 
     * @return void [返回类型说明]
     * @throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年10月12日]
     * @author rain
     */
    void deleteProperty(String propertyType, String propertyKey);
    
    /**
     * 获取属性<br>
     * 如果属性不存在,则也返回 null<br>
     * 如果返回的属性为泛型或者包含泛型,且此泛型为非基本数据类型(自定义 bean),通常情况下,会被解析成Map型,特此注意
     *
     * @param propertyType 属性类型
     * @param propertyKey 属性key
     * 
     * @return Object 属性
     * @throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年10月12日]
     * @author rain
     */
    Object getProperty(String propertyType, String propertyKey);
    
    /**
     * 属性类型<br>
     * 为null时,适配所有属性
     */
    String propertyType();
    
    /**
     * 保存属性
     *
     * @param propertyType 属性类型
     * @param propertyKey 属性key
     * @param property 属性
     * 
     * @return void [返回类型说明]
     * @throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年10月10日]
     * @author rain
     */
    void setProperty(String propertyType, String propertyKey, Object property);
    
    /**
     * 移除属性
     *
     * @param propertyType 属性类型
     * @param propertyKey 属性key
     * 
     * @return void [返回类型说明]
     * @throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     * @version [版本号, 2016年10月14日]
     * @author rain
     */
    void removeProperty(String propertyType, String propertyKey);
}
